﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using MakeIT.MiraPark.Negocios;

namespace MiraPark
{
    public partial class FormCadastroTipoVeiculo : Form
    {
        private string operacao = "";

        public FormCadastroTipoVeiculo()
        {
            InitializeComponent();
        }

        private void FormCadastroTipoVeiculo_Load(object sender, EventArgs e)
        {
            //Popular a lista de tipos de colisões cadastrados
            this.dataGridViewTipoVeiculos.DataSource = ModelBO.getTipoVeiculos();
            setupButtonsControls();
        }

        private void dataGridViewTipoVeiculo_SelectionChanged(object sender, EventArgs e)
        {
            setupButtonsControls();
        }

        private void buttonNovo_Click(object sender, EventArgs e)
        {
            this.operacao = "novo";
            setupButtonsControls();
        }

        private void buttonCancelar_Click(object sender, EventArgs e)
        {
            this.operacao = "cancelar";
            setupButtonsControls();
        }

        private void buttonEditar_Click(object sender, EventArgs e)
        {
            this.operacao = "editar";
            setupButtonsControls();
        }

        private void buttonExcluir_Click(object sender, EventArgs e)
        {
            List<TipoVeiculoVO> tipoList = (List<TipoVeiculoVO>)this.dataGridViewTipoVeiculos.DataSource;
            TipoVeiculoVO tipo = tipoList[this.dataGridViewTipoVeiculos.CurrentRow.Index];

            if (!ModelBO.readyToDeleteTipoVeiculo(tipo.idTipoVeiculo))
            {
                MessageBox.Show(this, "Tipo de veículo não pode ser excluído pois já está associada a Modelos e/ou Veículos", "Aviso");
                return;
            }

            this.operacao = "excluir";

            DialogResult dr = MessageBox.Show(this, "Confirma a exclusão do tipo de veículo " + tipo.tipoVeiculo, "Confirmação", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
            if (dr.ToString().Equals("Yes"))
            {
                ModelBO.delTipoVeiculo(tipo);

                int nRow = this.dataGridViewTipoVeiculos.CurrentRow.Index;
                this.dataGridViewTipoVeiculos.DataSource = ModelBO.getTipoVeiculos();
                if (this.dataGridViewTipoVeiculos.Rows.Count > 0)
                {
                    dataGridViewTipoVeiculos.CurrentCell = dataGridViewTipoVeiculos.Rows[Math.Min(nRow, this.dataGridViewTipoVeiculos.Rows.Count - 1)].Cells[1];
                    dataGridViewTipoVeiculos.Rows[Math.Min(nRow, this.dataGridViewTipoVeiculos.Rows.Count) - 1].Selected = true;
                }
                setupButtonsControls();
            }
        }

        private void buttonSalvar_Click(object sender, EventArgs e)
        {
            String erros = "";
            if (this.textBoxVeiculo.Text.Trim().Length == 0)
                erros = erros + "Nome de veículo deve ser informado.\r\n";
            if (erros.Length > 0)
            {
                MessageBox.Show(this, erros, "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

            TipoVeiculoVO tipo = null;

            if (this.operacao.Equals("novo"))
            {

                tipo = TipoVeiculoVO.CreateTipoVeiculoVO();
                tipo.tipoVeiculo = this.textBoxVeiculo.Text;
                tipo.permitido = this.checkBoxPermitido.Checked;
                tipo.ordem = (int)this.numericUpDownOrdem.Value;

                tipo.idTipoVeiculo = (int) ModelBO.newTipoVeiculo(tipo);
            }
            if (this.operacao.Equals("editar"))
            {
                List<TipoVeiculoVO> tipoList = (List<TipoVeiculoVO>)this.dataGridViewTipoVeiculos.DataSource;
                tipo = tipoList[this.dataGridViewTipoVeiculos.CurrentRow.Index];

                tipo.tipoVeiculo = this.textBoxVeiculo.Text;
                tipo.permitido = this.checkBoxPermitido.Checked;
                tipo.ordem = (int)this.numericUpDownOrdem.Value;

                ModelBO.setTipoVeiculo(tipo);
            }
            this.operacao = "salvar";

            List<TipoVeiculoVO> listTipoVeiculoVOs = ModelBO.getTipoVeiculos();
            dataGridViewTipoVeiculos.DataSource = listTipoVeiculoVOs;
            int nRow = listTipoVeiculoVOs.FindIndex(a => a.idTipoVeiculo == tipo.idTipoVeiculo);
            dataGridViewTipoVeiculos.CurrentCell = dataGridViewTipoVeiculos.Rows[nRow].Cells[1];
            dataGridViewTipoVeiculos.Rows[nRow].Selected = true;

            setupButtonsControls();
        }


        private void setupButtonsControls()
        {
            bool haRows = this.dataGridViewTipoVeiculos.Rows.Count > 0 && this.dataGridViewTipoVeiculos.CurrentRow != null;
            bool novo = this.operacao.Equals("novo");
            bool edit = this.operacao.Equals("editar");
            bool canc = this.operacao.Equals("cancelar");

            this.buttonCancelar.Enabled = novo || edit;
            this.buttonNovo.Enabled = !novo && !edit;
            this.buttonEditar.Enabled = haRows && !novo && !edit;
            this.buttonExcluir.Enabled = haRows && !novo && !edit;
            this.buttonSalvar.Enabled = novo || edit;

            this.textBoxVeiculo.Enabled = novo || edit;
            this.checkBoxPermitido.Enabled = novo || edit;
            this.numericUpDownOrdem.Enabled = novo || edit;

            this.dataGridViewTipoVeiculos.Enabled = !novo && !edit;

            if (!haRows || novo)
            {
                this.textBoxId.Text = "";
                this.textBoxVeiculo.Text = "";
                this.numericUpDownOrdem.Value = 999;
                this.checkBoxPermitido.Checked = false;
            }
            else {
                List<TipoVeiculoVO> tipoList = (List<TipoVeiculoVO>)this.dataGridViewTipoVeiculos.DataSource;
                TipoVeiculoVO tipo = tipoList[this.dataGridViewTipoVeiculos.CurrentRow.Index];
                this.textBoxId.Text = tipo.idTipoVeiculo.ToString();
                this.textBoxVeiculo.Text = tipo.tipoVeiculo;
                this.checkBoxPermitido.Checked = tipo.permitido;
                this.numericUpDownOrdem.Value = tipo.ordem;
            }
            if (novo || edit){
                this.textBoxVeiculo.Focus();
            }
        }

        private void buttonListagem_Click(object sender, EventArgs e)
        {
            FormReportTipoVeiculo formx = new FormReportTipoVeiculo();
            formx.MdiParent = this.MdiParent;
            formx.Show();
        }

     }
}
